﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using AreaComunServices.Persistencia;
using AreaComunServices.Dominio;

namespace AreaComunServices
{
    public class AreasComunesService : IAreasComunesService
    {
        private AreaComunDAO areacomunDAO = null;
        private AreaComunDAO AreaComunDAO
        {
            get
            {
                if (areacomunDAO == null)
                    areacomunDAO = new AreaComunDAO();
                return areacomunDAO;
            }
        }

        #region IAreasComunes Members

        public String CrearAreaComun(AreaComun areaComunACrear)
        {
            var listaAC = ListarAreasComunes();
            int codigo = areaComunACrear.IdInventario;

            String mensj = "";
            if (codigo < 0)
                mensj = "El número de inventario no puede ser negativo";
            if (areaComunACrear.Descripcion.Trim().Equals(""))
                mensj = "La descripción está vacía";    

            foreach (AreaComun ac in listaAC)
            {
                if (ac.IdInventario == codigo)
                    mensj = "El número de inventario ya existe";                
            }

            if (mensj.Equals(""))
            {
                try
                {
                    /*
                    AreaComun areaComunACrear = new AreaComun()
                    {
                        Codigo = codigo,
                        Descripcion = descripcion,
                        Implementos = implementos
                    };
                    */
                    AreaComunDAO.Crear(areaComunACrear); 
                }
                catch
                {
                    mensj = "No se pudo registrar";
                }
            }
            return mensj;
        }

        public AreaComun ObtenerAreaComun(string codigoStr)
        {
            return AreaComunDAO.Obtener(int.Parse(codigoStr));
        }

        public string ModificarAreaComun(AreaComun areaComunAModificar)
        {
            var listaAC = ListarAreasComunes();

            String mensj = "El número de inventario no existe";
            foreach (AreaComun ac in listaAC)
            {
                if (ac.IdInventario == areaComunAModificar.IdInventario)
                    mensj = "";
            }
            if (areaComunAModificar.Descripcion.Trim().Equals(""))
                mensj = "La descripción está vacía";

            if (mensj.Equals(""))
            {
                try
                {
                    /*
                    AreaComun areaComunAModificar = new AreaComun()
                    {
                        IdInventario = codigo,
                        Descripcion = descripcion,
                        Implementos = implementos
                    };
                     */
                    AreaComunDAO.Modificar(areaComunAModificar);
                }
                catch
                {
                    mensj = "No se pudo modificar";
                }
            }
            return mensj;
        }

        public string EliminarAreaComun(string codigo)
        {
            try
            {
                AreaComun areaComunExistente = AreaComunDAO.Obtener(int.Parse(codigo));
                AreaComunDAO.Eliminar(areaComunExistente);
                return "";
            }
            catch (Exception e)
            {
                return "No se pudo eliminar";
            }

        }

        public List<AreaComun> ListarAreasComunes()
        {
            return AreaComunDAO.ListarTodos().ToList();
        }

        #endregion
    }
}
